package ocio.services;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import ocio.actions.LoginAction;
import ocio.beans.Usuario;
import ocio.dao.UsuarioDao;

import com.opensymphony.xwork2.Action;

/**
 * Clase encargada de ofrecer la lógica de negocio asociada a la clase Usuario.
 * Ofrece funciones CRUD para la gestión de usuarios.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Usuario
 * @see ocio.services.ServiceIF
 */
public class UsuarioService implements ServiceIF{

	UsuarioDao usuarioDao;
	
	public UsuarioService (){
		usuarioDao = new UsuarioDao();
	}

	
	@Override
	public boolean add(Action form) {
		return false;
	}

	/**
	 * Solicita la lista de todos los usuarios que cumplan con los requisitos
	 * introducidos en un formulario y recogidos en un objeto de la clase Action
	 * @param form objeto de la clase Action con los datos de búsqueda.
	 * @return listaUsuarios Lista de todos los usuarios que cumplen los criterios de búsqueda.
	 */
	@Override
	public List<Object> searchByFields(Action form) {
		List<Object> resul = new ArrayList<Object>();
		List<Usuario> listaUsuarios = new ArrayList<Usuario>();
		LoginAction uform = (LoginAction) form;
		Usuario u = new Usuario();
		
		u.setCorreo(uform.getCorreo());
		u.setPassword(uform.getPassword());
		
		listaUsuarios = usuarioDao.findByExample(u);	
	    Iterator<Usuario> itr = listaUsuarios.iterator();
	    while(itr.hasNext()) {
	         Object element = itr.next();
	         resul.add(element);
	    }		
	    return resul;
	}

	/**
	 * Solicita la lista de todos los usuarios que cumplan con los requisitos
	 * recogidos en un objeto de la misma clase Usuario
	 * @param u objeto de la clase Usuario con los criterios de búsqueda.
	 * @return listaUsuarios Lista de todos los usuarios que cumplen los criterios de búsqueda.
	 */
	public List<Object> searchByFields(Usuario u) {
		List<Object> resul = new ArrayList<Object>();
		List<Usuario> listaUsuarios = new ArrayList<Usuario>();
		
		listaUsuarios = usuarioDao.findByExample(u);	
	    Iterator<Usuario> itr = listaUsuarios.iterator();
	    while(itr.hasNext()) {
	         Object element = itr.next();
	         resul.add(element);
	    }		
	    return resul;
	}

	/**
	 * Búsqueda de usuario por identificador.
	 * @param id identifificador en la base de datos del usuario.
	 * @return u Objeto correspondiente al usuario con el identificador dado.
	 */
	@Override
	public Object searchById(int id) {
		Usuario u;
		u = usuarioDao.findById(id);
		return u;// TODO Auto-generated method stub
	}

	@Override
	public void update(Action form) {
		// TODO Auto-generated method stub
		
	}
	
	/**
	 * Borra el usuario.
	 * @param o Objeto correspondiente al usuario que se quiere borrar.
	 */
	@Override
	public void delete(Object o) {
		// TODO Auto-generated method stub
		Usuario u;
		u = (Usuario)o;
		usuarioDao.delete(u);

	}

}
